package com.yc.mcp;

import dev.langchain4j.mcp.McpToolProvider;
import dev.langchain4j.mcp.client.DefaultMcpClient;
import dev.langchain4j.mcp.client.McpClient;
import dev.langchain4j.mcp.client.transport.McpTransport;
import dev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.tool.ToolProvider;

import java.util.Collections;
import java.util.Scanner;

/**
 * MCP成绩查询客户端：连接服务器并发送查询请求
 */
public class ScoreQueryMcpClient {

    // 定义AI服务接口（用于调用MCP工具）
    interface ScoreQueryAssistant {
        @SystemMessage("你是成绩查询助手，可调用工具查询考试成绩。直接返回查询结果即可。")
        String queryScore(String userInput);
    }

    public static void main(String[] args) throws Exception {
        // 1. 创建MCP传输（连接服务器，使用Stdio与服务器通信）
        McpTransport transport = new StdioMcpTransport.Builder()
                .logEvents(true) // 打印通信日志（可选）
                .build();

        // 2. 创建MCP客户端
        McpClient mcpClient = new DefaultMcpClient.Builder()
                .transport(transport)
                .build();

        // 3. 创建工具提供者（关联MCP客户端）
        ToolProvider toolProvider = McpToolProvider.builder()
                .mcpClients(Collections.singletonList(mcpClient))
                .build();

        // 4. 构建AI服务（用于调用工具）
        ScoreQueryAssistant assistant = AiServices.builder(ScoreQueryAssistant.class)
                .toolProvider(toolProvider)
                .build();

        // 5. 交互：接收用户输入并查询成绩
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号、姓名或班级查询成绩（输入q退出）：");
        while (true) {
            String userInput = scanner.nextLine();
            if ("q".equalsIgnoreCase(userInput)) {
                break;
            }
            try {
                String result = assistant.queryScore(userInput);
                System.out.println("查询结果：" + result);
            } catch (Exception e) {
                System.out.println("查询出错：" + e.getMessage());
            }
        }

        // 关闭资源
        mcpClient.close();
        scanner.close();
    }
}